{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!--NAVIGATION-->\n",
    "< [密度和轮廓图](04.04-Density-and-Contour-Plots.ipynb) | [目录](Index.ipynb) | [自定义图表图例](04.06-Customizing-Legends.ipynb) >\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/wangyingsm/Python-Data-Science-Handbook/blob/master/notebooks/04.05-Histograms-and-Binnings.ipynb\"><img align=\"left\" src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open in Colab\" title=\"Open and Execute in Google Colaboratory\"></a>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Histograms, Binnings, and Density\n",
    "\n",
    "# 直方图，分桶和密度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> A simple histogram can be a great first step in understanding a dataset.\n",
    "Earlier, we saw a preview of Matplotlib's histogram function (see [Comparisons, Masks, and Boolean Logic](02.06-Boolean-Arrays-and-Masks.ipynb)), which creates a basic histogram in one line, once the normal boiler-plate imports are done:\n",
    "\n",
    "一个简单的直方图可以是我们开始理解数据集的第一步。前面我们看到了Matplotlib的直方图函数（参见[比较，遮盖和布尔逻辑](02.06-Boolean-Arrays-and-Masks.ipynb)），我们可以用一行代码绘制基础的直方图，当然首先需要将需要用的包导入notebook："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('seaborn-white')\n",
    "\n",
    "data = np.random.randn(1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(data);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> The ``hist()`` function has many options to tune both the calculation and the display; \n",
    "here's an example of a more customized histogram:\n",
    "\n",
    "`hist()`函数有很多的参数可以用来调整运算和展示；下面又一个更加个性化的直方图展示：\n",
    "\n",
    "译者注：normed参数已经过时，此处对代码进行了相应修改，使用了替代的density参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(data, bins=30, density=True, alpha=0.5,\n",
    "         histtype='stepfilled', color='steelblue',\n",
    "         edgecolor='none');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> The ``plt.hist`` docstring has more information on other customization options available.\n",
    "I find this combination of ``histtype='stepfilled'`` along with some transparency ``alpha`` to be very useful when comparing histograms of several distributions:\n",
    "\n",
    "`plt.hist`文档中有更多关于个性化参数的信息。作者发现联合使用`histtype='stepfilled'`和`alpha`参数设置透明度在对不同分布的数据集进行比较展示时很有用："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x1 = np.random.normal(0, 0.8, 1000)\n",
    "x2 = np.random.normal(-2, 1, 1000)\n",
    "x3 = np.random.normal(3, 2, 1000)\n",
    "\n",
    "kwargs = dict(histtype='stepfilled', alpha=0.3, density=True, bins=40)\n",
    "\n",
    "plt.hist(x1, **kwargs)\n",
    "plt.hist(x2, **kwargs)\n",
    "plt.hist(x3, **kwargs);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> If you would like to simply compute the histogram (that is, count the number of points in a given bin) and not display it, the ``np.histogram()`` function is available:\n",
    "\n",
    "如果你只是需要计算直方图的数值（即每个桶的数据点数量）而不是展示图像，`np.histogram()`函数可以完成这个目标："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 23 192 446 295  44]\n"
     ]
    }
   ],
   "source": [
    "counts, bin_edges = np.histogram(data, bins=5)\n",
    "print(counts)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Two-Dimensional Histograms and Binnings\n",
    "\n",
    "## 二维直方图和分桶\n",
    "\n",
    "> Just as we create histograms in one dimension by dividing the number-line into bins, we can also create histograms in two-dimensions by dividing points among two-dimensional bins.\n",
    "We'll take a brief look at several ways to do this here.\n",
    "We'll start by defining some data—an ``x`` and ``y`` array drawn from a multivariate Gaussian distribution:\n",
    "\n",
    "正如前面我们可以在一维上使用数值对应的直线划分桶一样，我们也可以在二维上使用数据对应的点来划分桶。本节我们介绍几种实现的方法。首先定义数据集，从多元高斯分布中获得`x`和`y`数组："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "mean = [0, 0]\n",
    "cov = [[1, 1], [1, 2]]\n",
    "x, y = np.random.multivariate_normal(mean, cov, 10000).T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ``plt.hist2d``: Two-dimensional histogram\n",
    "\n",
    "### `plt.hist2d`：二维直方图\n",
    "\n",
    "> One straightforward way to plot a two-dimensional histogram is to use Matplotlib's ``plt.hist2d`` function:\n",
    "\n",
    "绘制二维直方图最直接的方法是使用Matplotlib的`plt.hist2d`函数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist2d(x, y, bins=30, cmap='Blues')\n",
    "cb = plt.colorbar()\n",
    "cb.set_label('counts in bin')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Just as with ``plt.hist``, ``plt.hist2d`` has a number of extra options to fine-tune the plot and the binning, which are nicely outlined in the function docstring.\n",
    "Further, just as ``plt.hist`` has a counterpart in ``np.histogram``, ``plt.hist2d`` has a counterpart in ``np.histogram2d``, which can be used as follows:\n",
    "\n",
    "类似`plt.hist`，`plt.hist2d`有许多额外的参数来调整分桶计算和图表展示，可以通过文档了解更多信息。而且，`plt.hist`有`np.histogram`，`plt.hist2d`也有其对应的函数`np.histogram2d`。如下例："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "counts, xedges, yedges = np.histogram2d(x, y, bins=30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> For the generalization of this histogram binning in dimensions higher than two, see the ``np.histogramdd`` function.\n",
    "\n",
    "如果要获得更高维度的分桶结果，参见`np.histogramdd`函数文档。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ``plt.hexbin``: Hexagonal binnings\n",
    "\n",
    "### ``plt.hexbin`：六角形分桶\n",
    "\n",
    "> The two-dimensional histogram creates a tesselation of squares across the axes.\n",
    "Another natural shape for such a tesselation is the regular hexagon.\n",
    "For this purpose, Matplotlib provides the ``plt.hexbin`` routine, which will represents a two-dimensional dataset binned within a grid of hexagons:\n",
    "\n",
    "刚才的二维分桶是沿着坐标轴将每个桶分为正方形。另一个很自然的分桶形状就是正六边形。对于这个需求，Matplotlib提供了`plt.hexbin`函数，它也是在二维平面上分桶展示，不过每个桶（即图表上的每个数据格）将会是六边形："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hexbin(x, y, gridsize=30, cmap='Blues')\n",
    "cb = plt.colorbar(label='count in bin')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> ``plt.hexbin`` has a number of interesting options, including the ability to specify weights for each point, and to change the output in each bin to any NumPy aggregate (mean of weights, standard deviation of weights, etc.).\n",
    "\n",
    "`plt.hexbin`有许多有趣的参数，包括能对每个点设置权重和将每个桶的输出数据结果改为任意的NumPy聚合结果（带权重的平均值，带权重的标准差等）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Kernel density estimation\n",
    "\n",
    "### 核密度估计\n",
    "\n",
    "> Another common method of evaluating densities in multiple dimensions is *kernel density estimation* (KDE).\n",
    "This will be discussed more fully in [In-Depth: Kernel Density Estimation](05.13-Kernel-Density-Estimation.ipynb), but for now we'll simply mention that KDE can be thought of as a way to \"smear out\" the points in space and add up the result to obtain a smooth function.\n",
    "One extremely quick and simple KDE implementation exists in the ``scipy.stats`` package.\n",
    "Here is a quick example of using the KDE on this data:\n",
    "\n",
    "另外一个常用来统计多维数据密度的工具是*核密度估计*（KDE）。这部分内容将在[深入：核密度估计](05.13-Kernel-Density-Estimation.ipynb)一节中详细介绍。目前我们只需要知道KDE被认为是一种可以用来填补数据的空隙并补充上平滑变化数据的方法就足够了。快速和简单的KDE算法已经在`scipy.stats`模块中有了成熟的实现。下面我们就一个简单的例子来说明如何使用KDE和绘制相应的二维直方图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.stats import gaussian_kde\n",
    "\n",
    "# 产生和处理数据，初始化KDE\n",
    "data = np.vstack([x, y])\n",
    "kde = gaussian_kde(data)\n",
    "\n",
    "# 在通用的网格中计算得到Z的值\n",
    "xgrid = np.linspace(-3.5, 3.5, 40)\n",
    "ygrid = np.linspace(-6, 6, 40)\n",
    "Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)\n",
    "Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))\n",
    "\n",
    "# 将图表绘制成一张图像\n",
    "plt.imshow(Z.reshape(Xgrid.shape),\n",
    "           origin='lower', aspect='auto',\n",
    "           extent=[-3.5, 3.5, -6, 6],\n",
    "           cmap='Blues')\n",
    "cb = plt.colorbar()\n",
    "cb.set_label(\"density\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> KDE has a smoothing length that effectively slides the knob between detail and smoothness (one example of the ubiquitous bias–variance trade-off).\n",
    "The literature on choosing an appropriate smoothing length is vast: ``gaussian_kde`` uses a rule-of-thumb to attempt to find a nearly optimal smoothing length for the input data.\n",
    "\n",
    "KDE有着光滑的长度，可以在细节和光滑度中有效的进行调节（一个例子是方差偏差权衡）。这方面有大量的文献介绍：高斯核密度估计`gaussian_kde`使用了经验法则来寻找输入数据附近的优化光滑长度值。\n",
    "\n",
    "> Other KDE implementations are available within the SciPy ecosystem, each with its own strengths and weaknesses; see, for example, ``sklearn.neighbors.KernelDensity`` and ``statsmodels.nonparametric.kernel_density.KDEMultivariate``.\n",
    "For visualizations based on KDE, using Matplotlib tends to be overly verbose.\n",
    "The Seaborn library, discussed in [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb), provides a much more terse API for creating KDE-based visualizations.\n",
    "\n",
    "其他的KDE实现也可以在SciPy中找到，每一种都有它的优点和缺点；参见``sklearn.neighbors.KernelDensity``和``statsmodels.nonparametric.kernel_density.KDEMultivariate``。要绘制基于KDE进行可视化的图表，Matplotlib写出的代码会比较冗长。我们将在[使用Seaborn进行可视化](04.14-Visualization-With-Seaborn.ipynb)一节中介绍Seaborn库，它提供了更加简洁的方式用来绘制KDE图表。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!--NAVIGATION-->\n",
    "< [密度和轮廓图](04.04-Density-and-Contour-Plots.ipynb) | [目录](Index.ipynb) | [自定义图表图例](04.06-Customizing-Legends.ipynb) >\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/wangyingsm/Python-Data-Science-Handbook/blob/master/notebooks/04.05-Histograms-and-Binnings.ipynb\"><img align=\"left\" src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open in Colab\" title=\"Open and Execute in Google Colaboratory\"></a>\n"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
